[小ネタ] 対象のテーブルがクローンされたものか知りたい #SnowflakeDB
先日Snowflakeハンズオン中に以「テーブルがクローンされたものかどうか知る方法はありますか?」という質問をいただきました。
すぐに思い浮かんだのはテーブル定義(下図)を確認することだったのですが、もっといけてる方法があるだろうなと思って検索をしたところ、日本語の記事が見つからなかったので共有します。
上の記事の通り、インフォメーションスキーマにあるtable_storage_metrics
ビューのid
とclone_group_id
が同じ値であれば、そのテーブルはクローンされていなくて、違う値の場合にはクローンされているということになります。
実践
existed_horiというテーブルをクローンして、hori_cloneというテーブルを作成します。
create table hori_clone clone existed_hori;
インフォメーションスキーマにあるtable_storage_metrics
ビューで先ほどクローンして作成したhori_cloneテーブルのid
とclone_group_id
を調べてみます。
select id, clone_group_id from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS where table_name = 'HORI_CLONE';
上図の通り、idとclone_group_idが異なっています。
それでは、hori_cloneテーブルのclone_group_idと一致するidを持つテーブルを探してみます。
select table_name from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS where ID = ( select clone_group_id from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS where table_name = 'HORI_CLONE' );
上図の通り、hori_cloneテーブルのクローン元のテーブルであるexisted_horiテーブルが該当しました。
それでは、クローンされたテーブルを再度クローンした場合はどうなるのでしょうか?
# hori_cloneをクローンしてhori_clone_cloneテーブルを作成 create table hori_clone_clone clone hori_clone; # hori_clone_cloneテーブルのclone_group_idと一致するidを持つテーブルを割り出す select table_name from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS where ID = ( select clone_group_id from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS where table_name = 'HORI_CLONE_CLONE' );
結果は、大元の(クローン元のhori_cloneテーブルのクローン元である)existed_horiテーブルがヒットしました。
まとめ
Snowflakeで対象のテーブルがクローンされたものかどうかを確認する方法についてご紹介しました!